#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
int w[N],n,d[N];
vector<int>a[N]; 
inline int read(){
	char c=getchar();
	int f=1,ans=0;
	while(c<48||c>57) f=(c==45?f=-1:1),c=getchar();
	while(c>=48&&c<=57) ans=(ans<<1)+(ans<<3)+(c^48),c=getchar();
	return ans*f;
}
void dfs(int u,int fa){//求解 w 数组
	for (auto v:a[u]){
		if (v^fa) dfs(v,u);
		w[u]+=(d[v]==2);
	}
}
inline int bfs(int sx){//求解连通块 w 的和
	queue<int>q;
	q.push(sx);
	int ans=0;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		ans+=w[u];
		d[u]=0;
		for (auto v:a[u]){
			if (d[v]^3) continue;
			q.push(v);
		}
	}
	return ans;
}
main(){
	n=read();
	for (int i=1;i<n;i++){
		int u=read(),v=read();
		d[u]++,d[v]++;
		a[u].push_back(v);
		a[v].push_back(u);
	}
	dfs(1,0);
	int ans=0;
	for (int i=1;i<=n;i++) if (d[i]==3){
		int x=bfs(i);
		ans+=x*(x-1)/2;//计算答案，任意两个点都可以组成题目满足的条件，因此这个连通块的贡献为 C(x,2)=x*(x-1)/2
	}
	cout <<ans;
    return 0;
}